cmake_minimum_required(VERSION 2.8.3)
project(glviewer)

include(FindPkgConfig)
find_package(catkin REQUIRED COMPONENTS
        roscpp
        )

find_package(Eigen3 QUIET)

if (NOT EIGEN3_FOUND)
    # Fallback to cmake_modules
    find_package(cmake_modules REQUIRED)
    find_package(Eigen REQUIRED)
    set(EIGEN3_INCLUDE_DIRS ${EIGEN_INCLUDE_DIRS})
    set(EIGEN3_LIBRARIES ${EIGEN_LIBRARIES})  # Not strictly necessary as Eigen is head only
    # Possibly map additional variables to the EIGEN3_ prefix.
else ()
    set(EIGEN3_INCLUDE_DIRS ${EIGEN3_INCLUDE_DIR})
endif ()

set(CMAKE_AUTOMOC ON)
#set(CMAKE_AUTOUIC ON)
#set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

SET(CMAKE_CXX_FLAGS "-O2 -g -Wall ${CMAKE_CXX_FLAGS}")

find_package(Qt5Core REQUIRED)
find_package(Qt5Widgets REQUIRED)
find_package(Qt5OpenGL REQUIRED)
find_package(Qt5Gui REQUIRED)

find_package(OpenGL REQUIRED)

catkin_package(
        INCLUDE_DIRS include
        LIBRARIES glviewer
        CATKIN_DEPENDS roscpp
)

if ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64" OR "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i686" OR "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch64")
    include_directories(
            include
            ${catkin_INCLUDE_DIRS}
            ${CMAKE_CURRENT_SOURCE_DIR}
            ${CMAKE_CURRENT_BINARY_DIR}
            ${EIGEN3_INCLUDE_DIRS}
    )

    qt5_wrap_cpp(glviewer_SRC
            include/glviewer/glviewer.h
            )

    add_library(glviewer
            GLViewer/glviewer.cpp
            ${glviewer_SRC}
            )

    target_link_libraries(glviewer
            ${catkin_LIBRARIES}
            ${EIGEN3_LIBRARIES}
            Qt5::Core
            Qt5::Widgets
            Qt5::OpenGL
            Qt5::Gui
            ${OPENGL_LIBRARIES}
            )

    install(DIRECTORY include/${PROJECT_NAME}/
            DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
            FILES_MATCHING PATTERN "*.h"
            )

    install(TARGETS glviewer
            ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
            LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
            RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
            )
endif ()
